/***************************************************************************
** 版权所有:   Copyright (c) 2020-2030
** 文件名称:  function.cpp
** 当前版本:  v1.0
** 作    者:
** 完成日期: 2024-07-15
** 修改记录:
** 修改日期:
** 版本号  :
** 修改人  :
** 修改内容:
***************************************************************************/

/*****************************头文件****************************************/

/*****************************宏定义****************************************/

/*****************************结构体或类型定义*******************************/

/*****************************全局变量****************************************/

/*****************************本地变量****************************************/

/*****************************函数或类声明****************************************/

/*****************************函数或类实现****************************************/
#include <iostream>
#include <chrono>

// 定义一个函数，用于计算斐波那契数列的第n项
int fibonacci(int n) {
    if (n <= 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

// 定义一个函数，用于检测函数执行时间
template <typename Func, typename... Args>
auto measureExecutionTime(Func func, Args&&... args) {
    auto start = std::chrono::high_resolution_clock::now();
    auto result = func(std::forward<Args>(args)...);
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> duration = end - start;
    return std::make_pair(result, duration.count());
}

int main() {
    // 测试函数执行时间检测
    int n = 40;
    auto [fibResult, fibTime] = measureExecutionTime(fibonacci, n);
    std::cout << "Fibonacci(" << n << ") = " << fibResult << std::endl;
    std::cout << "Execution time for fibonacci(" << n << "): " << fibTime << " seconds" << std::endl;

    return 0;
}

/*****************************by extern "C"****************************************/

#ifdef __cplusplus
extern "C" {
#endif

/*****************************头文件****************************************/

/*****************************宏定义****************************************/

/*****************************结构体或类型定义*******************************/

/*****************************全局变量****************************************/

/*****************************本地变量****************************************/

/*****************************函数或类声明****************************************/

/*****************************函数或类实现****************************************/
#if 0
int main(int argc, char const *argv[])
{
    /* code */
    return 0;
}
#endif


#ifdef __cplusplus
}
#endif
